export const exampleJsonSpec = {
  openapi: '3.0.1',
  info: {
    title: 'Swagger Petstore',
    description:
      'This is a sample server Petstore server.  You can find out more about     Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/).      For this sample, you can use the api key `special-key` to test the authorization     filters.',
    termsOfService: 'http://swagger.io/terms/',
    contact: { email: 'apiteam@swagger.io' },
    license: {
      name: 'Apache 2.0',
      url: 'http://www.apache.org/licenses/LICENSE-2.0.html',
    },
    published: true,
    version: 123,
  },
  externalDocs: {
    description: 'Find out more about Swagger',
    url: 'http://swagger.io',
  },
  servers: [
    { url: 'https://petstore.swagger.io/v2' },
    { url: 'http://petstore.swagger.io/v2' },
  ],
  tags: [
    {
      name: 'pet',
      description: 'Everything about your Pets',
      externalDocs: {
        description: 'Find out more',
        url: 'http://swagger.io',
      },
    },
    { name: 'store', description: 'Access to Petstore orders' },
    {
      name: 'user',
      description: 'Operations about user',
      externalDocs: {
        description: 'Find out more about our store',
        url: 'http://swagger.io',
      },
    },
  ],
  paths: {
    '/pet/{petId}/uploadImage': {
      post: {
        tags: ['pet'],
        summary: 'uploads an image',
        operationId: 'uploadFile',
        parameters: [
          {
            name: 'petId',
            in: 'path',
            description: 'ID of pet to update',
            required: true,
            schema: { type: 'integer', format: 'int64' },
          },
        ],
        requestBody: {
          content: {
            'multipart/form-data': {
              schema: {
                properties: {
                  additionalMetadata: {
                    type: 'string',
                    description: 'Additional data to pass to server',
                  },
                  file: {
                    type: 'string',
                    description: 'file to upload',
                    format: 'binary',
                  },
                },
              },
            },
          },
        },
        responses: {
          '200': {
            description: 'successful operation',
            content: {
              'application/json': {
                schema: {
                  type: 'object',
                  properties: {
                    composedObject: {
                      allOf: [
                        {
                          type: 'object',
                          properties: {
                            orderId: { type: 'number' },
                            fulfillmentId: { type: 'string' },
                          },
                        },
                      ],
                    },
                    expandableObject: {
                      anyOf: [
                        {
                          type: 'object',
                          properties: {
                            orderId: { type: 'string' },
                          },
                        },
                        {
                          type: 'object',
                          properties: {
                            order: {
                              type: 'object',
                              properties: {
                                id: { type: 'string' },
                              },
                            },
                          },
                        },
                      ],
                    },
                  },
                },
              },
            },
          },
        },
        security: [{ petstore_auth: ['write:pets', 'read:pets'] }],
      },
    },
    '/store/inventory': {
      get: {
        tags: ['store'],
        summary: 'Returns pet inventories by status',
        description: 'Returns a map of status codes to quantities',
        operationId: 'getInventory',
        responses: {
          '200': {
            description: 'successful operation',
            content: {
              'application/json': {
                schema: {
                  type: 'object',
                  additionalProperties: {
                    type: 'integer',
                    format: 'int32',
                  },
                },
              },
            },
          },
        },
        security: [{ api_key: [] }],
      },
    },
    '/store/order': {
      post: {
        tags: ['store'],
        summary: 'Place an order for a pet',
        operationId: 'placeOrder',
        requestBody: {
          description: 'order placed for purchasing the pet',
          content: {
            '*/*': {
              schema: {
                type: 'object',
                properties: {
                  id: { type: 'integer', format: 'int64' },
                  petId: { type: 'integer', format: 'int64' },
                  quantity: { type: 'integer', format: 'int32' },
                  shipDate: { type: 'string', format: 'date-time' },
                  status: {
                    type: 'string',
                    description: 'Order Status',
                    enum: ['placed', 'approved', 'delivered'],
                  },
                  complete: { type: 'boolean', default: false },
                },
                xml: { name: 'Order' },
              },
            },
          },
          required: true,
        },
        responses: {
          '200': {
            description: 'successful operation',
            content: {
              'application/xml': {
                schema: {
                  type: 'object',
                  properties: {
                    id: { type: 'integer', format: 'int64' },
                    petId: { type: 'integer', format: 'int64' },
                    quantity: { type: 'integer', format: 'int32' },
                    shipDate: { type: 'string', format: 'date-time' },
                    status: {
                      type: 'string',
                      description: 'Order Status',
                      enum: ['placed', 'approved', 'delivered'],
                    },
                    complete: { type: 'boolean', default: false },
                  },
                  xml: { name: 'Order' },
                },
              },
              'application/json': {
                schema: {
                  type: 'object',
                  properties: {
                    id: { type: 'integer', format: 'int64' },
                    petId: { type: 'integer', format: 'int64' },
                    quantity: { type: 'integer', format: 'int32' },
                    shipDate: { type: 'string', format: 'date-time' },
                    status: {
                      type: 'string',
                      description: 'Order Status',
                      enum: ['placed', 'approved', 'delivered'],
                    },
                    complete: { type: 'boolean', default: false },
                  },
                  xml: { name: 'Order' },
                },
              },
            },
          },
          '400': { description: 'Invalid Order', content: {} },
        },
        'x-codegen-request-body-name': 'body',
      },
    },
    '/store/order/{orderId}': {
      get: {
        tags: ['store'],
        summary: 'Find purchase order by ID',
        description:
          'For valid response try integer IDs with value >= 1 and <= 10.         Other values will generated exceptions',
        operationId: 'getOrderById',
        parameters: [
          {
            name: 'orderId',
            in: 'path',
            description: 'ID of pet that needs to be fetched',
            required: true,
            schema: {
              maximum: 10,
              minimum: 1,
              type: 'integer',
              format: 'int64',
            },
          },
        ],
        responses: {
          '200': {
            description: 'successful operation',
            content: {
              'application/xml': {
                schema: {
                  type: 'object',
                  properties: {
                    id: { type: 'integer', format: 'int64' },
                    petId: { type: 'integer', format: 'int64' },
                    quantity: { type: 'integer', format: 'int32' },
                    shipDate: { type: 'string', format: 'date-time' },
                    status: {
                      type: 'string',
                      description: 'Order Status',
                      enum: ['placed', 'approved', 'delivered'],
                    },
                    complete: { type: 'boolean', default: false },
                  },
                  xml: { name: 'Order' },
                },
              },
              'application/json': {
                schema: {
                  type: 'object',
                  properties: {
                    id: { type: 'integer', format: 'int64' },
                    petId: { type: 'integer', format: 'int64' },
                    quantity: { type: 'integer', format: 'int32' },
                    shipDate: { type: 'string', format: 'date-time' },
                    status: {
                      type: 'string',
                      description: 'Order Status',
                      enum: ['placed', 'approved', 'delivered'],
                    },
                    complete: { type: 'boolean', default: false },
                  },
                  xml: { name: 'Order' },
                },
              },
            },
          },
          '400': { description: 'Invalid ID supplied', content: {} },
          '404': { description: 'Order not found', content: {} },
        },
      },
      delete: {
        tags: ['store'],
        summary: 'Delete purchase order by ID',
        description:
          'For valid response try integer IDs with positive integer value.         Negative or non-integer values will generate API errors',
        operationId: 'deleteOrder',
        parameters: [
          {
            name: 'orderId',
            in: 'path',
            description: 'ID of the order that needs to be deleted',
            required: true,
            schema: { minimum: 1, type: 'integer', format: 'int64' },
          },
        ],
        responses: {
          '400': { description: 'Invalid ID supplied', content: {} },
          '404': { description: 'Order not found', content: {} },
        },
      },
    },
    '/user': {
      post: {
        tags: ['user'],
        summary: 'Create user',
        description: 'This can only be done by the logged in user.',
        operationId: 'createUser',
        requestBody: {
          description: 'Created user object',
          content: {
            '*/*': {
              schema: {
                type: 'object',
                properties: {
                  id: { type: 'integer', format: 'int64' },
                  username: { type: 'string' },
                  firstName: { type: 'string' },
                  lastName: { type: 'string' },
                  email: { type: 'string' },
                  password: { type: 'string' },
                  phone: { type: 'string' },
                  userStatus: {
                    type: 'integer',
                    description: 'User Status',
                    format: 'int32',
                  },
                },
                xml: { name: 'User' },
              },
            },
          },
          required: true,
        },
        responses: {
          default: { description: 'successful operation', content: {} },
        },
        'x-codegen-request-body-name': 'body',
      },
    },
    '/user/createWithArray': {
      post: {
        tags: ['user'],
        summary: 'Creates list of users with given input array',
        operationId: 'createUsersWithArrayInput',
        requestBody: {
          description: 'List of user object',
          content: {
            '*/*': {
              schema: {
                type: 'array',
                items: {
                  type: 'object',
                  properties: {
                    id: { type: 'integer', format: 'int64' },
                    username: { type: 'string' },
                    firstName: { type: 'string' },
                    lastName: { type: 'string' },
                    email: { type: 'string' },
                    password: { type: 'string' },
                    phone: { type: 'string' },
                    userStatus: {
                      type: 'integer',
                      description: 'User Status',
                      format: 'int32',
                    },
                  },
                  xml: { name: 'User' },
                },
              },
            },
          },
          required: true,
        },
        responses: {
          default: { description: 'successful operation', content: {} },
        },
        'x-codegen-request-body-name': 'body',
      },
    },
    '/user/createWithList': {
      post: {
        tags: ['user'],
        summary: 'Creates list of users with given input array',
        operationId: 'createUsersWithListInput',
        requestBody: {
          description: 'List of user object',
          content: {
            '*/*': {
              schema: {
                type: 'array',
                items: {
                  type: 'object',
                  properties: {
                    id: { type: 'integer', format: 'int64' },
                    username: { type: 'string' },
                    firstName: { type: 'string' },
                    lastName: { type: 'string' },
                    email: { type: 'string' },
                    password: { type: 'string' },
                    phone: { type: 'string' },
                    userStatus: {
                      type: 'integer',
                      description: 'User Status',
                      format: 'int32',
                    },
                  },
                  xml: { name: 'User' },
                },
              },
            },
          },
          required: true,
        },
        responses: {
          default: { description: 'successful operation', content: {} },
        },
        'x-codegen-request-body-name': 'body',
      },
    },
    '/user/login': {
      get: {
        tags: ['user'],
        summary: 'Logs user into the system',
        operationId: 'loginUser',
        parameters: [
          {
            name: 'username',
            in: 'query',
            description: 'The user name for login',
            required: true,
            schema: { type: 'string' },
          },
          {
            name: 'password',
            in: 'query',
            description: 'The password for login in clear text',
            required: true,
            schema: { type: 'string' },
          },
        ],
        responses: {
          '200': {
            description: 'successful operation',
            headers: {
              'X-Rate-Limit': {
                description: 'calls per hour allowed by the user',
                schema: { type: 'integer', format: 'int32' },
              },
              'X-Expires-After': {
                description: 'date in UTC when token expires',
                schema: { type: 'string', format: 'date-time' },
              },
            },
            content: {
              'application/xml': { schema: { type: 'string' } },
              'application/json': { schema: { type: 'string' } },
            },
          },
          '400': {
            description: 'Invalid username/password supplied',
            content: {},
          },
        },
      },
    },
    '/user/logout': {
      get: {
        tags: ['user'],
        summary: 'Logs out current logged in user session',
        operationId: 'logoutUser',
        responses: {
          default: { description: 'successful operation', content: {} },
        },
      },
    },
  },
  components: {
    schemas: {
      Order: {
        type: 'object',
        properties: {
          id: { type: 'integer', format: 'int64' },
          petId: { type: 'integer', format: 'int64' },
          quantity: { type: 'integer', format: 'int32' },
          shipDate: { type: 'string', format: 'date-time' },
          status: {
            type: 'string',
            description: 'Order Status',
            enum: ['placed', 'approved', 'delivered'],
          },
          complete: { type: 'boolean', default: false },
        },
        xml: { name: 'Order' },
      },
      Category: {
        type: 'object',
        properties: {
          id: { type: 'integer', format: 'int64' },
          name: { type: 'string' },
        },
        xml: { name: 'Category' },
      },
      User: {
        type: 'object',
        properties: {
          id: { type: 'integer', format: 'int64' },
          username: { type: 'string' },
          firstName: { type: 'string' },
          lastName: { type: 'string' },
          email: { type: 'string' },
          password: { type: 'string' },
          phone: { type: 'string' },
          userStatus: {
            type: 'integer',
            description: 'User Status',
            format: 'int32',
          },
        },
        xml: { name: 'User' },
      },
      Tag: {
        type: 'object',
        properties: {
          id: { type: 'integer', format: 'int64' },
          name: { type: 'string' },
        },
        xml: { name: 'Tag' },
      },
      Pet: {
        required: ['name', 'photoUrls'],
        type: 'object',
        properties: {
          id: { type: 'integer', format: 'int64' },
          category: {
            type: 'object',
            properties: {
              id: { type: 'integer', format: 'int64' },
              name: { type: 'string' },
            },
            xml: { name: 'Category' },
          },
          name: { type: 'string', example: 'doggie' },
          photoUrls: {
            type: 'array',
            xml: { name: 'photoUrl', wrapped: true },
            items: { type: 'string' },
          },
          tags: {
            type: 'array',
            xml: { name: 'tag', wrapped: true },
            items: {
              type: 'object',
              properties: {
                id: { type: 'integer', format: 'int64' },
                name: { type: 'string' },
              },
              xml: { name: 'Tag' },
            },
          },
          status: {
            type: 'string',
            description: 'pet status in the store',
            enum: ['available', 'pending', 'sold'],
          },
        },
        xml: { name: 'Pet' },
      },
      ApiResponse: {
        type: 'object',
        properties: {
          code: { type: 'integer', format: 'int32' },
          type: { type: 'string' },
          message: { type: 'string' },
        },
      },
    },
    securitySchemes: {
      petstore_auth: {
        type: 'oauth2',
        flows: {
          implicit: {
            authorizationUrl: 'http://petstore.swagger.io/oauth/dialog',
            scopes: {
              'write:pets': 'modify pets in your account',
              'read:pets': 'read your pets',
            },
          },
        },
      },
      api_key: { type: 'apiKey', name: 'api_key', in: 'header' },
    },
  },
};
